﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using HPortal.Lib;
using System.Web.Security;

public partial class Backend_UserList : System.Web.UI.Page
{

    private string UsernameToMatch
    {
        get
        {
            object o = ViewState["UsernameToMatch"];
            if (o == null)
            {
                return string.Empty;
            }
            else
            {
                return (string)o;
            }
        }
        set
        {
            ViewState["UsernameToMatch"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            showListUsers();
            BindFileringUI();
            String username = Request.QueryString["user"];
            if ((username != null) && (username != ""))
            {
                UpdateApproved();
                getAllRoleOfUser(username);
                CheckedRolesForUser(username);
            }

        }
    }

    public void showListUsers()
    {
        grvUserList.DataSource = Membership.GetAllUsers();
        grvUserList.DataBind();
    }

    public void BindFileringUI()
    {
        String[] fileringOptions = { "All", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
        filteringUI.DataSource = fileringOptions;
        filteringUI.DataBind();
    }

    private void BindUserAccounts()
    {
        grvUserList.DataSource = Membership.FindUsersByName(this.UsernameToMatch + "%");
        grvUserList.DataBind();
    }

    protected void filteringUI_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "All")
            this.UsernameToMatch = string.Empty;
        else
            this.UsernameToMatch = e.CommandName;
        BindUserAccounts();
    }

    public void getAllRoleOfUser(string username)
    {
        String[] roles = Roles.GetAllRoles();
        UsersRoleList.DataSource = roles;
        UsersRoleList.DataBind();
    }

    public void CheckedRolesForUser(string username)
    {
        String[] selectedUserRoles = Roles.GetRolesForUser(username);
        foreach (RepeaterItem item in UsersRoleList.Items)
        {
            CheckBox roleCheckBox = item.FindControl("RoleCheckBox") as CheckBox;
            if (selectedUserRoles.Contains<string>(roleCheckBox.Text))
            {
                roleCheckBox.Checked = true;
            }
            else
            {
                roleCheckBox.Checked = false;
            }
        }
    }

    public void UpdateApproved()
    {

        string userName = Request.QueryString["user"];
        if (string.IsNullOrEmpty(userName))
            Response.Redirect("UserList.aspx");

        MembershipUser usr = Membership.GetUser(userName);
        if (usr == null)
            Response.Redirect("UserList.aspx");
        lblUsername.Text = usr.UserName;
        chkIsApproved.Checked = usr.IsApproved;
        txtEmail.Text = usr.Email;
        lblMessages.Text = "";
        mtvUserManager.ActiveViewIndex = 0;
    }

    protected void grvUserList_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        String user = grvUserList.DataKeys[e.NewSelectedIndex].Value.ToString();
        Response.Redirect("UserList.aspx?user=" + user);
    }
    protected void chkIsApproved_CheckedChanged(object sender, EventArgs e)
    {
        string userName = Request.QueryString["user"];
        MembershipUser usr = Membership.GetUser(userName);
        usr.IsApproved = chkIsApproved.Checked;
        Membership.UpdateUser(usr);
        showListUsers();
        lblMessages.Text = "Trạng thái được phê duyệt của người dùng đã được cập nhật";
    }
    
    protected void grvUserList_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvUserList.PageIndex = e.NewPageIndex;
        showListUsers();
        BindFileringUI();
    }
    protected void grvUserList_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        String username = grvUserList.DataKeys[e.RowIndex].Value.ToString();
        if (Membership.DeleteUser(username))
        {
            showListUsers();
        }
    }
    //Update roles of user
    protected void Button1_Click(object sender, EventArgs e)
    {
        //Cập nhật trạng thái và email người dùng
        string userName = Request.QueryString["user"];
        MembershipUser usr = Membership.GetUser(userName);
        usr.IsApproved = chkIsApproved.Checked;
        usr.Email = txtEmail.Text;
        Membership.UpdateUser(usr);
        

        //Cập nhật quyền người dùng
        for (int i = 0; i < UsersRoleList.Items.Count; i++)
        {

            CheckBox chkRole = (CheckBox)UsersRoleList.Items[i].FindControl("RoleCheckBox");
            String username = Request.QueryString["user"];
            String rolename = chkRole.Text;
            //Kiểm tra nếu người dùng chưa có quyền = rolename chỉ cập nhật
            Boolean hasRole = Roles.IsUserInRole(username, rolename);
            if (hasRole == false)
            {
                if (chkRole.Checked == true)
                {
                    Roles.AddUserToRole(username, rolename);
                }
            }
            if (hasRole == true)
            {
                if (chkRole.Checked == false)
                {
                    Roles.RemoveUserFromRole(username, rolename);
                }
            }
        }
        showListUsers();
        lblMessages.Text = "Thông tin và quyền người dùng được cập nhật thành công.";
        //Response.Redirect("UserList.aspx", false);
    }
    protected void btnDong_Click(object sender, EventArgs e)
    {
        Response.Redirect("UserList.aspx", false);
    }
    protected void btnSearch_Click(object sender, EventArgs e)
    {
        if (drdlSearch.SelectedValue=="Username")
        {
            grvUserList.DataSource = Membership.FindUsersByName(txtSearch.Text);
            grvUserList.DataBind();
        }
        else if (drdlSearch.SelectedValue=="Email")
        {
            grvUserList.DataSource = Membership.FindUsersByEmail(txtSearch.Text);
            grvUserList.DataBind();
        }
    }
}